#include<iostream>
using namespace std;
#define LL long long


//扩展欧几里德算法，求整数x,y，使得gcd（a,b）=xm+ny=d,m>n
void exgcd(LL a,LL b,LL &d,LL &x,LL &y)
{
	if(b==0)
	{
		x=1;y=0;d=a;
	}
	else
	{
		exgcd(b,a%b,d,x,y);
		LL temp=x;
		x=y;
		y=temp-a/b*y;
	}
}

//应用1：一元解线性同余方程ax=b(mod m),x的最小值
LL f(LL a,LL b,LL m)
{
	LL d,x,y;
	exgcd(a,m,d,x,y);
	if(b%d)
		return -1;
	x=x*b/d;
	LL tem=m/d;
	x=x%tem;
	if(x<0)x+=m/d;
	x=x%tem;
	return x;
}

int main()
{
	LL a,b,c,k,m;
	while(cin>>a>>b>>c>>k&&(a+b+c+k))
	{
		m=1ll<<k;
		LL t=f(c,b-a,m);
		if(t==-1)cout<<"FOREVER"<<endl;
		else cout<<t<<endl;
	}
	return 0;
}
